scala集合之Array与List 您所在的位置:网站首页 scala tuple 赋值 scala集合之Array与List

scala集合之Array与List

2023-12-17 01:29| 来源: 网络整理| 查看: 265

Scala中的集合包括Seq序列、Set组、Map映射,Seq包含了有索引的数组(Array、ArrayBuffer)和无索引的列表(List、ListBuffer)。 不可变集合指的是集合对象的存放地址、集合大小与类型、占用内存空间不可修改,只可以修改元素。若增删元素,则每次增删后会产生新对象,原有对象不会改变 可变集合指的是集合对象的存放地址、集合大小与类型、占用内存空间都可以修改,每次修改后不会产生新对象。对可变集合的操作尽量不要重新赋予新变量,因为新变量改变后,原变量也会随之改变。 可变集合包:scala.collection.mutable 不可变集合包:scala.collection.mutable

一、数组

数组就是常见的下标与元素一一对应的集合,即有索引的Seq。数组也分为可变与不可变,都用new关键字创建 new Array/ArrayBuffer[type](length)不可变数组是Array,可变数组是ArrayBuffer,可变数组的长度可以不定义

1、不可变数组

创建长度为5的整数型数组,并访问、修改元素

object Main { def main(args:Array[String])= { //空数组 val arr1 = new Array[Int](5) //值数组 val arr2 = Array(1,2,4,3,6) //访问数组第一个元素 println(arr2(0)) //修改并访问数组第2个元素 arr2(1) = 8 println(arr2(1)) } }

遍历数组所有元素

object Main { def main(args:Array[String])= { //直接遍历 for (i val arr2 = Array(1,2,4,3,6) //在最前面加元素 val newarr = arr2.+:(8) val newarr1 = arr2.+:(8).+:(9) val newarr6 = 1 +: arr2 //方法调用的圆点可以省略,等同于数组、方法、新增元素用空格隔开。方法以:结尾时,右边往前调用的,也就是数组要在方法右侧,新增元素在方法左侧 println(newarr.mkString("-")) println(newarr1.mkString("-")) println(newarr6.mkString("-")) //在最后边加元素 val newarr2 = arr2.:+(7) val newarr3 = arr2.:+(0).:+(6) val newarr7 = arr2 :+ 2 //方法调用的圆点可以省略,等同于数组、方法、新增元素用空格隔开 println(newarr2.mkString("-")) println(newarr3.mkString("-")) println(newarr7.mkString("-")) //同时在前后加元素 val newarr4 = arr2.:+(1).:+(2).+:(3).+:(4) val newarr5 = 1 +: 2 +: arr2 :+ 3 :+ 4 println(newarr4.mkString("-")) println(newarr5.mkString("-")) } } 2、可变数组

创建数组,访问、修改元素同不可变数组

object Main extends App { import scala.collection.mutable._ //创建空数组 val arr:ArrayBuffer[Int] = new ArrayBuffer[Int]() //创建值数组 val newarr = ArrayBuffer(1,2,3) println(arr) println(newarr) //可变数组可直接输出,默认调用toString方法 } ArrayBuffer() ArrayBuffer(1, 2, 3)

增加元素 调用方法:最后边新增+=或append、最前边新增+=:或prepend、按索引插入元素insert、按索引插入数组insertAll或prependAll或appendAll

object Main extends App { import scala.collection.mutable._ val newarr = ArrayBuffer(1,2,3) val newarr1 = Array(4,5) //最后边新增元素 newarr += 4 += 5 newarr.append(6,7) //最前边新增元素 0 +=: newarr newarr.prepend(8,9) //按索引新增元素 newarr.insert(1,2,3) //新增元素 //新增数组 newarr.appendAll(newarr1) //最前边 newarr.prependAll(newarr1) //最后边 newarr.insertAll(2,newarr1) //按索引 println(newarr) } ArrayBuffer(4, 5, 4, 5, 8, 2, 3, 9, 0, 1, 2, 3, 4, 5, 6, 7, 4, 5)

删除元素 调用方法:删除元素-=、按索引删除remove

object Main extends App { import scala.collection.mutable._ val newarr = ArrayBuffer(1,2,3,4,5) //删除元素 newarr -= 3 println(newarr) //按索引删除 newarr.remove(1) //删除索引1对应的元素 println(newarr) newarr.remove(0,2) //从索引0开始,删除2个元素 println(newarr) } ArrayBuffer(1, 2, 4, 5) ArrayBuffer(1, 4, 5) ArrayBuffer(5) 3、可变数组与不可变数组的相互转换:toArray、toBuffer object Main extends App { import scala.collection.mutable._ //可变转不可变 val newarr = ArrayBuffer(1,2,3,4,5) val arr = newarr.toArray println(newarr) println(arr.mkString(",")) //不可变转可变 val newarr1 = (arr :+ 8).toBuffer println(newarr1) } 4、多维数组

多维数组用Array.ofDim[type](i,j,…),i表示几行,j表示几列 创建2维数组,并访问

object Main extends App { //创建2行3列的数组 val arr = Array.ofDim[Int](2,3) println(arr.mkString(",")) //元素修改 arr(0)(1) = 2 arr(1)(2) = 3 //按角标遍历 for (i val list = List("f,g") val queue = new scala.collection.mutable.Queue[Any] queue.enqueue("a","b",3) println("队列:" + queue) println("第一个元素:" + queue.head) //第一个元素 println("最后一个元素:" + queue.last) //最后一个元素 println("尾队列:" + queue.tail) //除第一个元素外剩下的队列 println("首队列:" + queue.init) //除最后一个元素外剩下的队列 println("前2个元素:" + queue.take(2)) println("后2个元素:" + queue.takeRight(2)) println("出1:" + queue.dequeue) println("队列:" + queue) println("出2:" + queue.dequeue) println("队列:" + queue) //新增元素 queue.enqueue("d","e") queue += "f" println("新进:" + queue) println("出3:" + queue.dequeue) println("队列:" + queue) //新增list内所有元素 println("新增list内所有元素") println(queue ++= list) //新增list为一个元素 println("新增list为一个元素") println(queue += list) } 队列:Queue(a, b, 3) 第一个元素:a 最后一个元素:3 尾队列:Queue(b, 3) 首队列:Queue(a, b) 前2个元素:Queue(a, b) 后2个元素:Queue(b, 3) 出1:a 队列:Queue(b, 3) 出2:b 队列:Queue(3) 新进:Queue(3, d, e, f) 出3:3 队列:Queue(d, e, f) 新增list内所有元素 Queue(d, e, f, f,g) 新增list为一个元素 Queue(d, e, f, f,g, List(f,g)) 不可变队列 object Main extends App { val queue1 = scala.collection.immutable.Queue(1,2,3) println("队列:" + queue1) println(queue1.dequeue) println("队列:" + queue1) val queue2 = queue1.enqueue(4,5) println("出2:" + queue2.dequeue) println("队列:" + queue2) } 队列:Queue(1, 2, 3) (1,Queue(2, 3)) 队列:Queue(1, 2, 3) 出2:(1,Queue(2, 3, (4,5))) 队列:Queue(1, 2, 3, (4,5)) 二、列表

列表List是一个没有索引的Seq序列,也分为可变和不可变。不可变列表本质是一个抽象类,创建的时候不需要使用new关键字,但可变列表创建时需要使用new关键字。直接创建含值列表时,可用List/ListBuffer()创建。

1、不可变列表 object Main extends App { //用List创建列表 val list = List(1,2,3,4) println(list) //列表是封闭的,所以可以按列表形式直接打印 //用Nil调用方法::,创建列表。Nil是一个空列表 val list5 = 12 :: 13 :: 14 :: Nil println(list5) //访问元素的方式跟数组相同,这只是scala底层针对列表访问做了优化,并不代表列表有索引。列表就不能按索引赋值 println("元素2:" + list(1)) //调用foreach方法 list.foreach(println) } List(1, 2, 3, 4) List(12, 13, 14) 元素2:2 1 2 3 4

元素新增

object Main extends App { val list = List(1,2,3,4) println("list:" + list) //添加元素 val list1 = list :+ 5 :+ 6 println("list1:" + list1) val list2 = 7 +: 8 +: list println("list2:" + list2) //调用::方法,给列表最前边加元素 val list3 = list.::(0).::(1) val list4 = 2 :: 3 :: list println("list3:" + list3) println("list4:" + list4) //列表合并,调用方法:::或++ val list5 = list1 ::: list val list6 = list1 ++ list println("list5:" + list5) println("list6:" + list6) } list:List(1, 2, 3, 4) list1:List(1, 2, 3, 4, 5, 6) list2:List(7, 8, 1, 2, 3, 4) list3:List(1, 0, 1, 2, 3, 4) list4:List(2, 3, 1, 2, 3, 4) list5:List(1, 2, 3, 4, 5, 6, 1, 2, 3, 4) list6:List(1, 2, 3, 4, 5, 6, 1, 2, 3, 4) 2、可变列表 object Main extends App { import scala.collection.mutable._ val list = new ListBuffer[Int]() val list1 = ListBuffer(1,2,3) val list2 = ListBuffer(14,15) println("list:" + list) println("list1:" + list1) //添加元素 list1.append(4,5) println("list1:" + list1) list1.prepend(6,7) println("list1:" + list1) 10 +=: 11 +=: list1 += 8 += 9 println("list1:" + list1) list1.insert(1,12,13) println("list1:" + list1) //插入列表 list1.insertAll(1,list2) println("list1:" + list1) list1.appendAll(list2) println("list1:" + list1) list1.prependAll(list2) println("list1:" + list1) //列表合并 list1 ++= list2 //只改变list1,list2不变 println("list1:" + list1) println("list2:" + list2) //修改元素 list1(2) = 1 println("元素2:" + list1(2)) //删除元素 list1.remove(1) //删除第2个元素 println("删除第2个元素" + list1) list1 -= 3 //删除元素3 println("删除元素3" + list1) } list:ListBuffer() list1:ListBuffer(1, 2, 3) list1:ListBuffer(1, 2, 3, 4, 5) list1:ListBuffer(6, 7, 1, 2, 3, 4, 5) list1:ListBuffer(10, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9) list1:ListBuffer(10, 12, 13, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9) list1:ListBuffer(10, 14, 15, 12, 13, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9) list1:ListBuffer(10, 14, 15, 12, 13, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9, 14, 15) list1:ListBuffer(14, 15, 10, 14, 15, 12, 13, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9, 14, 15) list1:ListBuffer(14, 15, 10, 14, 15, 12, 13, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9, 14, 15, 14, 15) list2:ListBuffer(14, 15) 元素2:1 删除第2个元素ListBuffer(14, 1, 14, 15, 12, 13, 11, 6, 7, 1, 2, 3, 4, 5, 8, 9, 14, 15, 14, 15) 删除元素3ListBuffer(14, 1, 14, 15, 12, 13, 11, 6, 7, 1, 2, 4, 5, 8, 9, 14, 15, 14, 15)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有